home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / newnew3dtexture.s < prev    next >
Text File  |  1997-11-28  |  23KB  |  1,502 lines

  1.  
  2. * the 'Hello World' program in 68000 Assembler
  3. * the C version can be found in the Intuition manual
  4.  
  5. * this source code (C) HiSoft 1992 All Rights Reserved
  6.  
  7. * for Devpac Amiga Version 2 the following symbols were changed
  8. * to avoid clashes with the new include files:
  9. * Screen->MyScreen, NewScreen->MyNewScreen
  10. * Window->MyWindow, NewWindow->MyNewWindow
  11.  
  12.     opt    c+,d+
  13.  
  14.     include    workbench:utilities/devpac/system            use pre-assembled header
  15.     include    exec/exec_lib.i
  16.     include    intuition/intuition.i
  17.     include    intuition/intuition_lib.i
  18.     include    graphics/graphics_lib.i
  19.     include    graphics/text.i
  20.  
  21. INTUITION_REV    equ    31        v1.1
  22. GRAPHICS_REV    equ    31        v1.1
  23.  
  24. * Open the intuition library
  25.  
  26.     moveq    #100,d4            default error return code
  27.  
  28.     moveq    #INTUITION_REV,d0    version
  29.     lea    int_name(pc),a1
  30.     CALLEXEC OpenLibrary
  31.     tst.l    d0
  32.     beq    exit_false        if failed then quit
  33.     move.l    d0,_IntuitionBase    else save the pointer
  34.  
  35.     moveq    #GRAPHICS_REV,d0
  36.     lea    graf_name(pc),a1
  37.     CALLEXEC OpenLibrary
  38.     tst.l    d0
  39. ;    beq    exit_closeint        if failed then close Int, exit
  40.     move.l    d0,_GfxBase
  41.  
  42.     lea    MyNewScreen(pc),a0
  43.     CALLINT    OpenScreen        open a screen
  44.     tst.l    d0
  45. ;    beq    exit_closeall        if failed the close both, exit
  46.     move.l    d0,MyScreen
  47.  
  48.     move.l MyScreen,a0
  49.     lea sc_BitMap(a0),a0
  50.     lea bm_Planes(a0),a0
  51.     move.l #RAWSCRN,(a0)
  52.     move.l #RAWSCRN+10240,4(a0)
  53.     move.l #RAWSCRN+10240*2,8(a0)
  54.     move.l #RAWSCRN+10240*3,12(a0)
  55.     move.l #RAWSCRN+10240*4,16(a0)
  56.     move.l #RAWSCRN+10240*5,20(a0)
  57.     move.l #RAWSCRN+10240*6,24(a0)
  58.     move.l #RAWSCRN+10240*7,28(a0)
  59.  
  60. * now initialise a NewWindow structure. This is normally easier to
  61. * do with dc.w/dc.l statement etc, but for comparison with the C
  62. * version we do it like this
  63.     lea    MyNewWindow(pc),a0    good place to start
  64.     move.w    #20,nw_LeftEdge(a0)
  65.     move.w    #20,nw_TopEdge(a0)
  66.     move.w    #300,nw_Width(a0)
  67.     move.w    #100,nw_Height(a0)
  68.     move.b    #0,nw_DetailPen(a0)
  69.     move.b    #1,nw_BlockPen(a0)
  70.     move.l    #window_title,nw_Title(a0)
  71. _temp    set    WINDOWCLOSE!SMART_REFRESH!ACTIVATE!WINDOWSIZING
  72.     move.l    #_temp!WINDOWDRAG!WINDOWDEPTH,nw_Flags(a0)
  73.     move.l    #CLOSEWINDOW,nw_IDCMPFlags(a0)
  74.     move.w    #CUSTOMSCREEN,nw_Type(a0)
  75.     clr.l    nw_FirstGadget(a0)
  76.     clr.l    nw_CheckMark(a0)
  77.     move.l    MyScreen(pc),nw_Screen(a0)
  78.     clr.l    nw_BitMap(a0)
  79.     move.w    #100,nw_MinWidth(a0)
  80.     move.w    #25,nw_MinHeight(a0)
  81.     move.w    #640,nw_MaxWidth(a0)
  82.     move.w    #200,nw_MaxHeight(a0)
  83.  
  84. * thats it set up, now open the window (a0=NewWindow already)
  85. ;    CALLINT    OpenWindow
  86. ;    tst.l    d0
  87. ;    beq    exit_closescr            if failed
  88. ;    move.l    d0,MyWindow            save it
  89. ;
  90. ;    move.l    d0,a1                window
  91. ;    move.l    wd_RPort(a1),a1            rastport
  92. ;    moveq    #20,d0                X
  93. ;    moveq    #20,d1                Y
  94. ;    CALLGRAF Move                move the cursor
  95. ;
  96. ;    move.l    MyWindow(pc),a0
  97. ;    move.l    wd_RPort(a0),a1            rastport
  98. ;    lea    hello_message(pc),a0
  99. ;    moveq    #11,d0
  100. ;    CALLGRAF Text                print something
  101. ;
  102. ;    move.l    MyWindow(pc),a0
  103. ;    move.l    wd_UserPort(a0),a0
  104. ;    move.b    MP_SIGBIT(a0),d1        (misprint in manual)
  105. ;    moveq    #0,d0
  106. ;    bset    d1,d0                do a shift
  107. ;    CALLEXEC Wait
  108.  
  109. ;    moveq    #0,d4                return code
  110.  
  111. * various exit routines that do tidying up, given a return code in d4
  112.  
  113. ;    move.l    MyWindow(pc),a0
  114. ;    CALLINT CloseWindow
  115.  
  116. ;exit_closescr
  117. ;    move.l    MyScreen(pc),a0
  118. ;    CALLINT CloseScreen
  119.  
  120. ;exit_closeall
  121. ;    move.l    _GfxBase(pc),a1
  122. ;    CALLEXEC CloseLibrary
  123.  
  124. ;exit_closeint
  125. ;    move.l    _IntuitionBase(pc),a1
  126. ;    CALLEXEC CloseLibrary
  127.  
  128. ;done:
  129. ;    bra done
  130.  
  131.  move.l #PALETTEBIT,a0
  132.  move.l #COPIEDPAL+4,a1
  133.  move.w #255,d0
  134.  
  135. copydown:
  136.  move.b 1(a0),(a1)
  137.  move.b 3(a0),4(a1)
  138.  move.b 5(a0),8(a1)
  139.  add.w #6,a0
  140.  add.w #12,a1
  141.  dbra d0,copydown
  142.  
  143.  move.w #256,COPIEDPAL
  144.  move.w #0,COPIEDPAL+2
  145. LOOKFORME:
  146.  move.l MyScreen,a0
  147.  lea sc_ViewPort(a0),a0
  148.  move.l #COPIEDPAL,a1
  149.  move.l _GfxBase,a6
  150.  jsr -$372(a6)
  151.  
  152.  move.l MyScreen,a4
  153.  move.w sc_MouseX(a4),d0
  154.  move.w sc_MouseY(a4),d1
  155.  move.w d0,OLDXM
  156.  move.w d1,OLDYM
  157.     
  158. loop:
  159.  
  160.  move.l MyScreen,a4
  161.  move.w sc_MouseX(a4),d0
  162.  move.w sc_MouseY(a4),d1
  163.  
  164.  sub.w OLDXM,d0
  165.  sub.w OLDYM,d1
  166.  add.w d0,OLDXM
  167.  add.w d1,OLDYM
  168.  
  169.  btst #6,$bfe001
  170.  beq.s .SHIFTABOUT
  171.  
  172.  
  173.  
  174.  muls #8190,d0
  175.  divs #160,d0
  176.  add.w d0,YANG
  177.  and.w #8190,YANG
  178.  muls #8190,d1
  179.  divs #160,d1
  180.  and.w #8190,d1
  181.  add.w d1,XANG
  182.  and.w #8190,XANG
  183.  bra .ROTABOUT
  184. .SHIFTABOUT
  185.  
  186.  add.w d0,XOFF
  187.  add.w d1,ZOFF
  188.  
  189.  
  190. .ROTABOUT
  191.  
  192.  move.l #SOLIDMAP,a0
  193.  move.w #(40*8)-1,d0
  194.  move.l #0,d1
  195. CLRSOLID
  196.  move.l d1,(a0)+
  197.  move.l d1,(a0)+
  198.  move.l d1,(a0)+
  199.  move.l d1,(a0)+
  200.  move.l d1,(a0)+
  201.  move.l d1,(a0)+
  202.  move.l d1,(a0)+
  203.  move.l d1,(a0)+
  204.  move.l d1,(a0)+
  205.  move.l d1,(a0)+
  206.  dbra d0,CLRSOLID
  207.  
  208. *******************************************
  209. * Calculate the shadows....
  210. *******************************************
  211.  
  212.  move.w XANG,d1
  213.  move.w YANG,d3
  214.  move.l #SINETABLE,a1
  215.  move.w (a1,d1.w),XSIN    ;xsin
  216.  move.w (a1,d3.w),YSIN    ;ysin
  217.  
  218.  add.w #2048,a1
  219.  move.w (a1,d1.w),XCOS    ;xcos
  220.  move.w (a1,d3.w),YCOS    ;ycos
  221.  
  222.  move.l #POLYGONDATA,a0
  223.  move.w (a0)+,d7    ; number of polys
  224. SHADOWLOOP:
  225.  move.w d7,-(a7)
  226.  
  227.  addq #2,a0
  228.  move.l #ROTATEDPTS,a2
  229.  move.l #UVCOORDS,a3
  230.  
  231.  moveq #3,d7
  232. .ROTPTLOP:
  233.  
  234.  move.w (a0)+,d0
  235.  move.w d0,d3
  236.  move.w (a0)+,d1
  237.  move.w (a0)+,d2
  238.  move.w d2,d5
  239.  
  240.  muls YCOS,d0
  241.  muls YSIN,d2
  242.  sub.l d2,d0
  243.  asr.l #6,d0    ; new x*512
  244.  
  245.  muls YSIN,d3
  246.  muls YCOS,d5
  247.  add.l d5,d3
  248.  add.l d3,d3
  249.  swap d3
  250.  move.w d3,d2    ; new z
  251.  
  252.  move.w d1,d4
  253.  move.w d2,d5
  254.  muls XCOS,d1
  255.  muls XSIN,d2
  256.  sub.l d2,d1
  257.  asr.l #6,d1    ; new y*512
  258.  
  259.  muls XSIN,d4
  260.  muls XCOS,d5
  261.  add.l d5,d4
  262.  add.l d4,d4
  263.  swap d4
  264.  move.w d4,d2    ; new z
  265.  
  266.  add.w ZOFF,d2
  267.  ext.l d2
  268.  
  269.  move.w XOFF,d5
  270.  ext.l d5
  271.  asl.l #8,d5
  272.  add.l d5,d5
  273.  add.l d5,d0
  274.  
  275.  move.l d0,(a2)+
  276.  move.l d1,(a2)+
  277.  move.l d2,(a2)+
  278.  addq #4,a2
  279.  
  280.  move.l (a0)+,(a3)+
  281.  
  282.  dbra d7,.ROTPTLOP
  283.  
  284.  move.l #SOLIDMAP,a1
  285.  move.l #ROTATEDPTS,a2
  286.  move.l #0,d7
  287. .ACROSS:
  288.  move.w #0,d6
  289.  move.l (0*16)(a2),d0
  290.  move.l (1*16)(a2),d3
  291.  sub.l d0,d3
  292.  move.l 4+(0*16)(a2),d1
  293.  move.l 4+(1*16)(a2),d4
  294.  sub.l d1,d4
  295.  move.l 8+(0*16)(a2),d2
  296.  move.l 8+(1*16)(a2),d5
  297.  sub.l d2,d5
  298.  muls.l d7,d3
  299.  muls.l d7,d4
  300.  muls.l d7,d5
  301.  asr.l #4,d3
  302.  asr.l #4,d4
  303.  asr.l #4,d5
  304.  add.l d3,d0    ;tx
  305.  add.l d4,d1    ;ty
  306.  add.l d5,d2    ;tz
  307.  
  308.  move.l 3*16(a2),d3
  309.  move.l 2*16(a2),d6
  310.  sub.l d3,d6
  311.  muls.l d7,d6
  312.  asr.l #4,d6
  313.  add.l d6,d3
  314.  
  315.  move.l 4+(3*16)(a2),d4
  316.  move.l 4+(2*16)(a2),d6
  317.  sub.l d4,d6
  318.  muls.l d7,d6
  319.  asr.l #4,d6
  320.  add.l d6,d4
  321.  
  322.  move.l 8+(3*16)(a2),d5
  323.  move.l 8+(2*16)(a2),d6
  324.  sub.l d5,d6
  325.  muls.l d7,d6
  326.  asr.l #4,d6
  327.  add.l d6,d5
  328.  
  329.  asr.l #8,d0
  330.  asr.l #8,d1
  331.  asr.l #8,d3
  332.  asr.l #8,d4
  333.  asr.l #1,d0
  334.  asr.l #1,d1
  335.  asr.l #1,d3
  336.  asr.l #1,d4
  337.  
  338.  sub.l d0,d3
  339.  sub.l d1,d4
  340.  sub.l d2,d5
  341.  sub.w #512,d2
  342.  
  343.  swap d3
  344.  clr.w d3
  345.  swap d4
  346.  clr.w d4
  347.  swap d2
  348.  clr.w d2
  349.  swap d0
  350.  clr.w d0
  351.  swap d1
  352.  clr.w d1
  353.  swap d5
  354.  clr.w d5
  355.  asr.l #8,d5
  356.  asr.l #4,d2
  357.  asr.l #8,d3
  358.  asr.l #4,d0
  359.  asr.l #8,d4
  360.  asr.l #4,d1
  361.  move.l d3,XADD
  362.  move.l d4,YADD
  363.  move.l d5,ZADD
  364.  add.l #20*65536,d0
  365. ; add.l lmxoff,d0
  366.  
  367.  add.l #20*65536,d1
  368.  add.l #20*65536,d2
  369.  
  370.  move.w #0,d6 
  371.  
  372. .DOWN:
  373.  
  374.  add.l XADD,d0
  375.  add.l YADD,d1
  376.  add.l ZADD,d2
  377.  
  378.  move.l d0,d3
  379. ; cmp.l #40*65536,d3
  380. ; blt.s .oksm
  381. ; sub.l #40*65536,d3
  382. ;.oksm:
  383.  move.l d1,d4
  384.  move.l d2,d5
  385.  
  386.  swap d3
  387.  swap d4
  388.  swap d5
  389.  
  390. ; muls #40,d5
  391. ; add.w d5,d4
  392.  muls #40,d5
  393.  ext.l d3
  394.  add.l d5,d3
  395.  
  396.  asl.w #3,d3
  397.  
  398.  move.w d4,d5
  399.  asr.w #3,d5
  400.  add.w d5,d3
  401.  
  402.  not.b d4
  403.  bset.b d4,(a1,d3.w)
  404.  
  405.  addq #1,d6
  406.  cmp.w #16,d6
  407.  ble .DOWN
  408.  addq #1,d7
  409.  cmp.w #16,d7
  410.  ble .ACROSS
  411.  
  412.  move.w (a7)+,d7
  413.  dbra d7,SHADOWLOOP
  414.  
  415.  move.l #SOLIDMAP,a1
  416. ; move.l #$80000000,(40*20+20)*8(a1)
  417.  
  418.  move.l #WORLD,a0
  419.  move.l #SOLIDMAP,a1
  420.  move.w #39,d0
  421. .ZLOOP
  422.  move.w #39,d1
  423.  move.l a0,a3
  424. .XLOOP
  425.  move.l a3,a2
  426.  move.l (a1)+,d2
  427.  move.w #31,d3
  428.  move.w #0,d4
  429.  move.w #0,d5
  430. .shadown1
  431.  move.b d4,(a2)
  432.  add.l d2,d2
  433.  bcc.s .noshad1
  434.  move.w #127,d5
  435.  bra.s .shad1
  436. .noshad1:
  437.  move.w d5,d4
  438. .shad1:
  439.  add.w #40,a2
  440.  dbra d3,.shadown1
  441.  
  442.  move.l (a1)+,d2
  443.  move.w #7,d3
  444. .shadown2
  445.  move.b d4,(a2)
  446.  add.l d2,d2
  447.  bcc.s .noshad2
  448.  move.w #127,d5
  449.  bra.s .shad2
  450. .noshad2:
  451.  move.w d5,d4
  452. .shad2
  453.  add.w #40,a2
  454.  dbra d3,.shadown2
  455.  
  456.  add.w #1,a3
  457.  dbra d1,.XLOOP
  458.  
  459.  add.w #1600,a0
  460.  dbra d0,.ZLOOP
  461.  
  462.  
  463.  move.l #POLYGONDATA,a0
  464.  move.w (a0)+,d7    ; number of polys
  465. POLYGONLOOP:
  466.  move.l d7,-(a7)
  467.  
  468.  move.w (a0)+,TEXTUREADD
  469.  move.l #ROTATEDPTS,a2
  470.  move.l #UVCOORDS,a3
  471.  
  472.  
  473.  moveq #3,d7
  474. ROTPTLOP:
  475.  
  476.  move.w (a0)+,d0
  477.  move.w d0,d3
  478.  move.w (a0)+,d1
  479.  move.w (a0)+,d2
  480.  move.w d2,d5
  481.  
  482.  muls YCOS,d0
  483.  muls YSIN,d2
  484.  sub.l d2,d0
  485.  asr.l #6,d0    ; new x*512
  486.  
  487.  muls YSIN,d3
  488.  muls YCOS,d5
  489.  add.l d5,d3
  490.  add.l d3,d3
  491.  swap d3
  492.  move.w d3,d2    ; new z
  493.  
  494.  move.w d1,d4
  495.  move.w d2,d5
  496.  muls XCOS,d1
  497.  muls XSIN,d2
  498.  sub.l d2,d1
  499.  asr.l #6,d1    ; new y*512
  500.  
  501.  muls XSIN,d4
  502.  muls XCOS,d5
  503.  add.l d5,d4
  504.  add.l d4,d4
  505.  swap d4
  506.  move.w d4,d2    ; new z
  507.  
  508.  
  509.  add.w ZOFF,d2
  510.  ext.l d2
  511.  
  512.  move.w XOFF,d5
  513.  ext.l d5
  514.  asl.l #8,d5
  515.  add.l d5,d5
  516.  add.l d5,d0
  517.  
  518.  move.l d0,(a2)+
  519.  move.l d1,(a2)+
  520.  move.l d2,(a2)+
  521.  addq #4,a2
  522.  
  523.  move.l (a0)+,(a3)+
  524.  
  525.  dbra d7,ROTPTLOP
  526.  
  527.  move.l a0,-(a7)
  528.  
  529.  moveq #3,d7
  530.  move.l #ROTATEDPTS,a0
  531.  move.l #ONSCREENPTS,a1
  532.  move.l FASTBUFFER,a2
  533. CONVTOSCREEN:
  534.  move.l (a0)+,d0
  535.  move.l (a0)+,d1
  536.  move.l (a0)+,d2
  537.  addq #4,a0  
  538.  
  539.  divs d2,d0
  540.  divs d2,d1
  541.  add.w #160*4,d0
  542.  add.w #128*4,d1
  543.  move.w d0,(a1)+
  544.  move.w d1,(a1)+
  545.  
  546. ; ext.l d0
  547. ; ext.l d1
  548. ; asr.l #2,d0
  549. ; and.b #%11111100,d1
  550. ; asl.l #4,d1
  551. ; move.l d1,d2
  552. ; asl.l #2,d1
  553. ; add.l d2,d1
  554. ; add.l d1,d0
  555. ;
  556. ; move.b #255,(a2,d0.l)
  557.  
  558.  dbra d7,CONVTOSCREEN
  559.  
  560.  move.l #ONSCREENPTS,a1
  561.  move.w (a1),d0    ;x1
  562.  sub.w 4(a1),d0
  563.  move.w 8(a1),d2
  564.  sub.w 4(a1),d2
  565.  
  566.  
  567.  move.w 2(a1),d1    ;x1
  568.  sub.w 6(a1),d1
  569.  move.w 10(a1),d3
  570.  sub.w 6(a1),d3
  571.  
  572.  muls d2,d1
  573.  muls d0,d3
  574.  sub.l d3,d1
  575.  ble NOPOLYGON
  576.  
  577. *****************************
  578. * Calculate the light map
  579.  move.l #LIGHTMAP,a0
  580.  move.l #WORLD,a1
  581.  move.l #ROTATEDPTS,a2
  582.  move.l #0,d7
  583. ACROSS:
  584.  move.w #0,d6
  585.  move.l (0*16)(a2),d0
  586.  move.l (1*16)(a2),d3
  587.  sub.l d0,d3
  588.  move.l 4+(0*16)(a2),d1
  589.  move.l 4+(1*16)(a2),d4
  590.  sub.l d1,d4
  591.  move.l 8+(0*16)(a2),d2
  592.  move.l 8+(1*16)(a2),d5
  593.  sub.l d2,d5
  594.  muls.l d7,d3
  595.  muls.l d7,d4
  596.  muls.l d7,d5
  597.  asr.l #3,d3
  598.  asr.l #3,d4
  599.  asr.l #3,d5
  600.  add.l d3,d0    ;tx
  601.  add.l d4,d1    ;ty
  602.  add.l d5,d2    ;tz
  603.  
  604.  move.l 3*16(a2),d3
  605.  move.l 2*16(a2),d6
  606.  sub.l d3,d6
  607.  muls.l d7,d6
  608.  asr.l #3,d6
  609.  add.l d6,d3
  610.  
  611.  move.l 4+(3*16)(a2),d4
  612.  move.l 4+(2*16)(a2),d6
  613.  sub.l d4,d6
  614.  muls.l d7,d6
  615.  asr.l #3,d6
  616.  add.l d6,d4
  617.  
  618.  move.l 8+(3*16)(a2),d5
  619.  move.l 8+(2*16)(a2),d6
  620.  sub.l d5,d6
  621.  muls.l d7,d6
  622.  asr.l #3,d6
  623.  add.l d6,d5
  624.  
  625.  asr.l #8,d0
  626.  asr.l #8,d1
  627.  asr.l #8,d3
  628.  asr.l #8,d4
  629.  asr.l #1,d0
  630.  asr.l #1,d1
  631.  asr.l #1,d3
  632.  asr.l #1,d4
  633.  
  634.  sub.l d0,d3
  635.  sub.l d1,d4
  636.  sub.l d2,d5
  637.  sub.w #512,d2
  638.  
  639.  swap d3
  640.  clr.w d3
  641.  swap d4
  642.  clr.w d4
  643.  swap d2
  644.  clr.w d2
  645.  swap d0
  646.  clr.w d0
  647.  swap d1
  648.  clr.w d1
  649.  swap d5
  650.  clr.w d5
  651.  asr.l #7,d5
  652.  asr.l #4,d2
  653.  asr.l #7,d3
  654.  asr.l #4,d0
  655.  asr.l #7,d4
  656.  asr.l #4,d1
  657.  move.l d3,XADD
  658.  move.l d4,YADD
  659.  move.l d5,ZADD
  660.  add.l #20*65536,d0
  661. ; add.l lmxoff,d0
  662.  
  663.  add.l #20*65536,d1
  664.  add.l #20*65536,d2
  665.  
  666.  move.w #0,d6 
  667.  
  668. DOWN:
  669.  
  670.  add.l XADD,d0
  671.  add.l YADD,d1
  672.  add.l ZADD,d2
  673.  
  674.  move.l d0,d3
  675. ; cmp.l #40*65536,d3
  676. ; blt.s .oksm
  677. ; sub.l #40*65536,d3
  678. ;.oksm:
  679.  move.l d1,d4
  680.  move.l d2,d5
  681.  
  682.  swap d3
  683.  swap d4
  684.  swap d5
  685.  
  686.  muls #40,d5
  687.  add.w d5,d4
  688.  muls #40,d4
  689.  ext.l d3
  690.  add.l d4,d3
  691.  
  692.  move.w d6,d4
  693.  move.w d7,d5
  694.  asl.w #4,d5
  695.  add.w d4,d5
  696.  
  697.  move.l d7,-(a7)
  698.  lea (a1,d3.l),a5
  699.  
  700.  moveq #0,d3
  701.  moveq #0,d4
  702.  move.b 0(a5),d3        ;x,y,z
  703.  
  704.  bra SIMPLE
  705.  
  706.  move.b 1(a5),d4    ;x+1,y,z
  707.  sub.w d3,d4
  708.  bge.s .okp1
  709.  neg.w d4
  710.  mulu d0,d4
  711.  neg.l d4
  712.  bra.s .dn1
  713. .okp1
  714.  mulu d0,d4
  715. .dn1
  716.  swap d4
  717.  add.w d4,d3
  718.  
  719.  moveq #0,d4
  720.  moveq #0,d5
  721.  move.b 0(a5),d4    ;x,y+1,z
  722.  move.b 1(a5),d5    ;x+1,y+1,z
  723.  sub.w d4,d5
  724.  bge.s .okp2
  725.  neg.w d5
  726.  mulu d0,d5
  727.  neg.l d5
  728.  bra.s .dn2
  729. .okp2
  730.  mulu d0,d5
  731. .dn2
  732.  swap d5
  733.  add.w d5,d4
  734.  
  735.  sub.w d3,d4
  736.  bge.s .okp5
  737.  neg.w d4
  738.  mulu d1,d4
  739.  neg.l d4
  740.  bra.s .dn5
  741. .okp5
  742.  mulu d1,d4
  743. .dn5
  744.  swap d4
  745.  add.w d4,d3
  746.  
  747.  moveq #0,d4
  748.  moveq #0,d5
  749.  move.b 1600(a5),d4        ;x,y,z
  750.  move.b 1601(a5),d5    ;x+1,y,z
  751.  sub.w d4,d5
  752.  bge.s .okp3
  753.  neg.w d5
  754.  mulu d0,d5
  755.  neg.l d5
  756.  bra.s .dn3
  757. .okp3
  758.  mulu d0,d5
  759. .dn3
  760.  swap d5
  761.  add.w d5,d4
  762.  
  763.  moveq #0,d5
  764.  moveq #0,d7
  765.  move.b 1600(a5),d5    ;x,y+1,z
  766.  move.b 1601(a5),d7    ;x+1,y+1,z
  767.  sub.w d5,d7
  768.  bge.s .okp4
  769.  neg.w d7
  770.  mulu d0,d7
  771.  neg.l d7
  772.  bra.s .dn4
  773. .okp4
  774.  mulu d0,d7
  775. .dn4
  776.  swap d7
  777.  add.w d7,d5
  778.  
  779.  sub.w d4,d5
  780.  bge.s .okp6
  781.  neg.w d5
  782.  mulu d1,d5
  783.  neg.l d5
  784.  bra.s .dn6
  785. .okp6
  786.  mulu d1,d5
  787. .dn6
  788.  swap d5
  789.  add.w d5,d4
  790.  
  791.  sub.w d3,d4
  792.  bge.s .okp7
  793.  neg.w d4
  794.  mulu d2,d4
  795.  neg.l d4
  796.  bra.s .dn7
  797. .okp7
  798.  mulu d2,d4
  799. .dn7
  800.  swap d4
  801.  add.w d4,d3
  802.  
  803. SIMPLE:
  804.  
  805.  move.l (a7)+,d7
  806.  move.w d6,d4
  807.  move.w d7,d5
  808.  asl.w #4,d5
  809.  add.w d4,d5
  810.  
  811.  lsr.b #2,d3
  812.  move.b d3,(a0,d5.w)
  813.  
  814.  
  815.  addq #1,d6
  816.  cmp.w #8,d6
  817.  ble DOWN
  818.  addq #1,d7
  819.  cmp.w #8,d7
  820.  ble ACROSS
  821.  
  822.  move.l #LIGHTMAP,a0
  823.  move.l #SMOOTHLIGHTMAP,a1
  824.  move.w #7,d0
  825. DOWNSQUARES:
  826.  swap d0
  827.  move.w #7,d0
  828.  move.l a0,a2
  829. ACROSSSQUARES:
  830.  moveq #0,d4
  831.  move.b 16(a2),d4    ;bl
  832.  moveq #0,d2
  833.  move.b (a2)+,d2    ;tl
  834.  moveq #0,d3
  835.  move.b (a2),d3        ;tr
  836.  moveq #0,d5
  837.  move.b 16(a2),d5    ;br
  838.  sub.w d2,d3
  839.  sub.w d4,d5
  840.  swap d2
  841.  swap d3
  842.  swap d4
  843.  swap d5
  844.  
  845.  asr.l #3,d3
  846.  asr.l #3,d5
  847.  moveq #7,d7
  848. ACROSSSQUARE
  849.  move.l d2,d1
  850.  move.l d4,d6
  851.  sub.l d1,d6
  852.  asr.l #3,d6
  853.  
  854.  swap d1
  855.  move.b d1,(a1)+
  856.  swap d1
  857.  add.l d6,d1
  858.  swap d1
  859.  move.b d1,256-1(a1)
  860.  swap d1
  861.  add.l d6,d1
  862.  swap d1
  863.  move.b d1,256*2-1(a1)
  864.  swap d1
  865.  add.l d6,d1
  866.  swap d1
  867.  move.b d1,256*3-1(a1)
  868.  swap d1
  869.  add.l d6,d1
  870.  swap d1
  871.  move.b d1,256*4-1(a1)
  872.  swap d1
  873.  add.l d6,d1
  874.  swap d1
  875.  move.b d1,256*5-1(a1)
  876.  swap d1
  877.  add.l d6,d1
  878.  swap d1
  879.  move.b d1,256*6-1(a1)
  880.  swap d1
  881.  add.l d6,d1
  882.  swap d1
  883.  move.b d1,256*7-1(a1)
  884.  
  885.  add.l d3,d2
  886.  add.l d5,d4
  887.  dbra d7,ACROSSSQUARE
  888.  
  889.  dbra d0,ACROSSSQUARES
  890.  add.w #16,a0
  891.  add.w #(256*8)-64,a1
  892.  swap d0
  893.  dbra d0,DOWNSQUARES
  894. *****************************
  895.  
  896.  
  897.  move.l #LEFTRIGHT,a0
  898.  move.w #15,d0
  899. emptyright:
  900.  move.l #-1,(a0)+
  901.  move.l #-1,(a0)+
  902.  move.l #-1,(a0)+
  903.  move.l #-1,(a0)+
  904.  move.l #-1,(a0)+
  905.  move.l #-1,(a0)+
  906.  move.l #-1,(a0)+
  907.  move.l #-1,(a0)+
  908.  move.l #-1,(a0)+
  909.  move.l #-1,(a0)+
  910.  move.l #-1,(a0)+
  911.  move.l #-1,(a0)+
  912.  move.l #-1,(a0)+
  913.  move.l #-1,(a0)+
  914.  move.l #-1,(a0)+
  915.  move.l #-1,(a0)+
  916.  dbra d0,emptyright
  917.  
  918.  move.w #0,d0
  919.  move.w #1,d1
  920.  bsr CALCLINE
  921.  move.w #1,d0
  922.  move.w #2,d1
  923.  bsr CALCLINE
  924.  move.w #2,d0
  925.  move.w #3,d1
  926.  bsr CALCLINE
  927.  move.w #3,d0
  928.  move.w #0,d1
  929.  bsr CALCLINE
  930.  
  931.  move.l #LEFTRIGHT,a0
  932.  move.l FASTBUFFER,a1
  933.  move.l #LEFTUVS,a3
  934.  move.l #TEXTURES,a5
  935.  move.w TEXTUREADD,d0
  936.  move.l #SMOOTHLIGHTMAP,a6
  937.  bge.s .okad
  938.  add.l #65536,a5
  939.  and.w #$7fff,d0
  940. .okad:
  941.  add.w d0,a5
  942.  move.w #255,d7
  943. drawpoly:
  944.  move.w (a0)+,d0    ;left end*4
  945.  move.w (a0)+,d1    ; right end*4
  946.  blt nolineh
  947.  asr.w #2,d0
  948.  blt nolineh
  949.  asr.w #2,d1
  950.  sub.w d0,d1
  951.  blt nolineh
  952.  
  953.  move.l (a3),d2
  954.  move.l 4(a3),d3
  955.  move.l (RIGHTUVS-LEFTUVS)(a3),d4
  956.  move.l 4+(RIGHTUVS-LEFTUVS)(a3),d5
  957.  
  958.  sub.l d2,d4
  959.  sub.l d3,d5
  960.  addq #1,d1
  961.  ext.l d1
  962.  divs.l d1,d4
  963.  divs.l d1,d5
  964.  move.l d4,a4
  965.  movem.l d7/a1/a3,-(a7)
  966.  move.l d5,a3
  967.  subq #1,d1
  968.  moveq #0,d4
  969.  
  970.  lea (a1,d0.w),a1
  971.  
  972. ; move.l d2,d5
  973. ; swap d5
  974. ; and.b #%11111000,d5
  975. ; add.w d5,d5
  976. ; move.l d3,d6
  977. ; swap d6
  978. ; asr.w #3,d6
  979. ; add.w d6,d5
  980. ;
  981. ; move.w 16(a2,d5.w),d6
  982. ; swap d6
  983. ; move.w (a2,d5.w),d6
  984.  
  985. ; move.l (a2,d5.w*2),d6
  986. ; move.l 32(a2,d5.w*2),d7
  987. ; sub.w d6,d7
  988. ; swap d6
  989. ; swap d7
  990. ; sub.w d6,d7
  991.  
  992. DOING:
  993.  
  994. .putline:
  995.  
  996. ; move.l d2,d0
  997. ; swap d0
  998. ; and.b #%11111000,d0
  999. ; add.w d0,d0
  1000. ; move.l d3,d4
  1001. ; swap d4
  1002. ; asr.w #3,d4
  1003. ; add.w d4,d0
  1004. ;
  1005. ; cmp.w d0,d5
  1006. ; beq.s .noread
  1007. ; move.w d0,d5
  1008. ; move.w 16(a2,d5.w),d6    ;tr,br
  1009. ; swap d6
  1010. ; move.w (a2,d5.w),d6    ;tl,bl
  1011.  
  1012. ; move.l (a2,d5.w*2),d6
  1013. ; move.l 32(a2,d5.w*2),d7
  1014. ; sub.w d6,d7
  1015. ; swap d6
  1016. ; swap d7
  1017. ; sub.w d6,d7
  1018. .noread:
  1019.  
  1020. ; move.l d3,d0
  1021. ; swap d0
  1022. ; asl.l #5,d0
  1023. ; and.w #%11100000,d0
  1024. ; move.w d0,d7
  1025. ; add.w d6,d0
  1026. ; move.w (a6,d0.w*2),d4
  1027. ; swap d6
  1028. ; add.w d6,d7
  1029. ; swap d6
  1030. ; move.b (a6,d7.w*2),d4
  1031. ; move.l d2,d0
  1032. ; swap d0
  1033. ; asl.l #5,d0
  1034. ; and.w #%11100000,d0
  1035. ; add.w d0,d4
  1036. ; move.w (a6,d4.w*2),d4
  1037.  
  1038. ; move.w d0,d4
  1039. ; muls d7,d0
  1040. ; asr.w #3,d0
  1041. ; add.w d6,d0    ; top bright
  1042. ; swap d7
  1043. ; swap d6
  1044. ; muls d7,d4
  1045. ; asr.w #3,d4
  1046. ; add.w d6,d4    ; bot bright
  1047. ; swap d7
  1048. ; swap d6
  1049. ;
  1050. ; sub.w d0,d4    ;bot-top
  1051. ; move.w d4,d1
  1052. ;
  1053. ; move.l d3,d4
  1054. ; swap d4
  1055. ; and.b #%111,d4
  1056. ; muls d1,d4
  1057. ; asr.w #3,d4
  1058. ; add.w d0,d4
  1059. ; lsl.w #8,d4
  1060.  
  1061.  move.l d2,d0
  1062.  lsr.l #8,d0
  1063.  swap d3
  1064.  move.b d3,d0
  1065.  move.b (a6,d0.w),d4
  1066.  asl.w #8,d4
  1067.  swap d3
  1068.  add.l a3,d3
  1069.  move.b (a5,d0.w*4),d4
  1070.  add.l a4,d2
  1071.  move.b TEXTUREPAL(pc,d4.w),(a1)+
  1072.  dbra d1,.putline
  1073.  
  1074.  movem.l (a7)+,d7/a1/a3
  1075. nolineh
  1076.  add.w #320,a1
  1077.  add.w #16,a3
  1078.  dbra d7,drawpoly
  1079.  bra PASTIT
  1080.  
  1081. TEXTUREPAL: incbin "ab3:includes/newtexturemaps.pal"
  1082.  
  1083. PASTIT:
  1084. NOPOLYGON:
  1085.  move.l (a7)+,a0
  1086.  move.l (a7)+,d7
  1087.  dbra d7,POLYGONLOOP
  1088.  
  1089.  
  1090.  move.l FASTBUFFER,a0
  1091.  add.l #40*320,a0
  1092.  move.l #RAWSCRN+40*40,a1
  1093.  move.l #(320/8)-1,d0
  1094.  move.l #175,d1
  1095.  move.w #0,d2
  1096.  move.w #0,d3
  1097.  moveq #0,d4
  1098.  moveq #0,d5
  1099. donebigconv
  1100.  jsr CHUNKYTOPLANAR 
  1101.  
  1102.  move.l FASTBUFFER,a0
  1103.  add.l #40*320,a0
  1104.  
  1105.  move.w #((320*176)/64)-1,d0
  1106.  moveq #0,d1
  1107. clrchunk:
  1108.  move.l d1,(a0)+
  1109.  move.l d1,(a0)+
  1110.  move.l d1,(a0)+
  1111.  move.l d1,(a0)+
  1112.  move.l d1,(a0)+
  1113.  move.l d1,(a0)+
  1114.  move.l d1,(a0)+
  1115.  move.l d1,(a0)+
  1116.  move.l d1,(a0)+
  1117.  move.l d1,(a0)+
  1118.  move.l d1,(a0)+
  1119.  move.l d1,(a0)+
  1120.  move.l d1,(a0)+
  1121.  move.l d1,(a0)+
  1122.  move.l d1,(a0)+
  1123.  move.l d1,(a0)+
  1124.  dbra d0,clrchunk
  1125.  
  1126.  
  1127.     btst #7,$bfe001
  1128.     beq.s exit_closescr
  1129.  
  1130.  
  1131.     add.l #$8000,lmxoff
  1132.     cmp.l #40*65536,lmxoff
  1133.     blt.s .oksm
  1134.     sub.l #40*65536,lmxoff    
  1135. .oksm
  1136.  
  1137.     bra loop
  1138.     
  1139. lmxoff: dc.l 0
  1140.  
  1141. exit_closescr
  1142.     move.l    MyScreen(pc),a0
  1143.     CALLINT CloseScreen
  1144.  
  1145. exit_closeall
  1146.     move.l    _GfxBase(pc),a1
  1147.     CALLEXEC CloseLibrary
  1148.  
  1149. exit_closeint
  1150.     move.l    _IntuitionBase(pc),a1
  1151.     CALLEXEC CloseLibrary
  1152.  
  1153. exit_false
  1154.     move.l    #0,d0                return code
  1155.     rts
  1156.     
  1157. XCOS: dc.w 0
  1158. YCOS: dc.w 0
  1159. XSIN: dc.w 0
  1160. YSIN: dc.w 0
  1161. XADD: dc.l 0
  1162. YADD: dc.l 0
  1163. ZADD: dc.l 0
  1164. XOFF: dc.w 0
  1165. YOFF: dc.w 0
  1166. OLDXM: dc.w 0
  1167. OLDYM: dc.w 0
  1168.  
  1169. TEXTUREADD: dc.w 0
  1170.  
  1171. CALCLINE:
  1172.  
  1173.  moveq #0,d2
  1174.  moveq #0,d3
  1175.  moveq #0,d4
  1176.  moveq #0,d5
  1177.  move.l #UVCOORDS,a0
  1178.  move.w (a0,d0.w*4),d2
  1179.  swap d2
  1180.  move.w 2(a0,d0.w*4),d3
  1181.  swap d3
  1182.  move.w (a0,d1.w*4),d4
  1183.  swap d4
  1184.  move.w 2(a0,d1.w*4),d5
  1185.  swap d5
  1186.  
  1187.  move.l #ONSCREENPTS,a1
  1188.  move.w 2(a1,d0.w*4),d6    ; ly
  1189.  move.w 2(a1,d1.w*4),d7    ; ry
  1190.  
  1191.  asr.w #2,d6
  1192.  move.l #LEFTRIGHT+2,a2
  1193.  move.l #RIGHTUVS,a3
  1194.  asr.w #2,d7
  1195.  cmp.w d6,d7
  1196.  beq .noline
  1197.  bgt.s .lineonright
  1198. .lineonleft:
  1199.  move.l #LEFTUVS,a3
  1200.  subq #2,a2
  1201.  exg d6,d7
  1202.  exg d0,d1
  1203.  exg d2,d4
  1204.  exg d3,d5 
  1205.  
  1206. ***********
  1207. * THROW AWAY ABOVE FOR NOW.
  1208. ***********
  1209. .lineonright:
  1210.  sub.w d6,d7
  1211.  lea (a2,d6.w*4),a2
  1212.  
  1213.  movem.l d0-d7/a0-a6,-(a7)
  1214.  move.l #SUBSTACK,a0
  1215.  asl.w #2,d0
  1216.  asl.w #2,d1
  1217.  move.l #ROTATEDPTS,a1
  1218.  move.l a0,a2
  1219.  move.l 4(a1,d0.w*4),(a2)+    ;ty
  1220.  move.l 8(a1,d0.w*4),(a2)+    ;tz
  1221.  move.l 4(a1,d1.w*4),(a2)+    ;by
  1222.  move.l 8(a1,d1.w*4),(a2)+    ;bz
  1223.  move.l d2,(a2)+        ;tu
  1224.  move.l d3,(a2)+        ;tv
  1225.  move.l d4,(a2)+        ;bu
  1226.  move.l d5,(a2)+        ;bv
  1227.  move.l (a1,d0.w*4),(a2)+    ;tx
  1228.  move.l (a1,d1.w*4),(a2)+    ;bx
  1229.  move.l #0,a5
  1230.  bsr SUBDIVIDE
  1231.  move.l a5,MAXSUB
  1232.  
  1233.  movem.l (a7)+,d0-d7/a0-a6
  1234.  
  1235.  move.w (a1,d0.w*4),d2
  1236.  move.w 2(a1,d0.w*4),d3
  1237.  move.w (a1,d1.w*4),d4
  1238.  move.w 2(a1,d1.w*4),d5
  1239.  
  1240.  sub.w d2,d4    ;dx
  1241.  sub.w d3,d5    ;dy
  1242.          ;d7=ddy
  1243.  
  1244.  subq #1,d7
  1245.  swap d4
  1246.  clr.w d4
  1247.  swap d2
  1248.  clr.w d2
  1249.  asl.l #2,d4
  1250.  ext.l d5
  1251.  divs.l d5,d4    ;dx/dy
  1252. .putinleftline
  1253.  swap d2
  1254.  move.w d2,(a2)
  1255.  addq #4,a2
  1256.  swap d2
  1257.  add.l d4,d2
  1258.  dbra d7,.putinleftline
  1259.  
  1260. .noline:
  1261.  rts
  1262.  
  1263. MAXSUB: dc.l 0
  1264.  
  1265. SUBDIVIDE:
  1266.  add.l #1,a5
  1267.  move.l (a0),d0
  1268.  move.l d0,d4
  1269.  move.l 4(a0),d1
  1270.  divs d1,d0
  1271.  move.l 8(a0),d2
  1272.  add.l d2,d4
  1273.  and.b #%11111100,d0
  1274.  move.l d2,40+8(a0)
  1275.  add.w #128*4,d0
  1276.  move.l 12(a0),d3
  1277.  asr.l #1,d4    ; middle y
  1278.  move.l d3,40+12(a0)
  1279.  divs d3,d2
  1280.  
  1281.  and.b #%11111100,d2
  1282.  add.w #128*4,d2
  1283.  
  1284.  move.l d1,12(a3,d0.w*4)
  1285.  move.l d3,12(a3,d2.w*4)
  1286.  add.l d1,d3
  1287.  asr.l #1,d3
  1288.  
  1289.  move.l 16(a0),d5
  1290.  move.l d5,(a3,d0.w*4)
  1291.  move.l 24(a0),d6
  1292.  move.l d6,24+40(a0)
  1293.  add.l d6,d5
  1294.  asr.l #1,d5
  1295.  move.l d5,(a3,d2.w*4)
  1296.  
  1297.  move.l 20(a0),d6
  1298.  move.l d6,4(a3,d0.w*4)
  1299.  move.l 28(a0),d7
  1300.  move.l d7,28+40(a0)
  1301.  add.l d7,d6
  1302.  asr.l #1,d6
  1303.  move.l d7,4(a3,d2.w*4)
  1304.  
  1305.  move.l 32(a0),d7
  1306.  move.l d7,8(a3,d0.w*4)
  1307.  move.l 36(a0),d1
  1308.  move.l d1,36+40(a0)
  1309.  add.l d1,d7
  1310.  asr.l #1,d7
  1311.  move.l d1,8(a3,d2.w*4)
  1312.  
  1313.  sub.w d0,d2
  1314.  sub.w #4,d2
  1315.  ble.s .nomore
  1316.  
  1317.  move.l d4,40(a0)  ;my
  1318.  move.l d4,8(a0)
  1319.  
  1320.  move.l d3,40+4(a0)    ;mz
  1321.  move.l d3,12(a0)
  1322.  move.l d5,40+16(a0)
  1323.  move.l d5,16+8(a0)
  1324.  move.l d6,40+20(a0)
  1325.  move.l d6,20+8(a0)
  1326.  move.l d7,40+32(a0)
  1327.  move.l d7,36(a0)
  1328.  
  1329.  add.l #40,a0
  1330.  bsr SUBDIVIDE
  1331.  sub.l #1,a5
  1332.  sub.l #40,a0
  1333.  bsr SUBDIVIDE
  1334. .nomore
  1335.  rts
  1336.  
  1337. **********************************************************
  1338.  
  1339. UVCOORDS: ds.l 4
  1340. ROTATEDPTS: ds.l 4*4
  1341. ONSCREENPTS: ds.l 4
  1342.  
  1343. ZOFF: dc.w 512
  1344.  
  1345. LEFTRIGHT: ds.l 256
  1346.  
  1347. POLYGONDATA:
  1348.  
  1349.  dc.w 3
  1350.  dc.w 3*256+3
  1351.  dc.w -256,128,128,0,0
  1352.  dc.w 256,128,128,63,0
  1353.  dc.w 256,128,-128,63,63
  1354.  dc.w -256,128,-128,0,63
  1355.  
  1356.  dc.w 3*256+2
  1357.  dc.w -256,-128,-128,0,0
  1358.  dc.w -256,-128,128,63,0
  1359.  dc.w -256,128,128,63,63
  1360.  dc.w -256,128,-128,0,63
  1361.  
  1362.  dc.w 3*256+2
  1363.  dc.w 256,-128,128,0,0
  1364.  dc.w 256,-128,-128,63,0
  1365.  dc.w 256,128,-128,63,63
  1366.  dc.w 256,128,128,0,63
  1367.  
  1368.  dc.w 3*256+2
  1369.  dc.w 128,-256,128,0,0
  1370.  dc.w 128,-256,-128,63,0
  1371.  dc.w 256,-128,-128,63,63
  1372.  dc.w 256,-128,128,0,63
  1373.  
  1374.  
  1375. SINETABLE:
  1376.  incbin "ab3:includes/bigsine"
  1377.  
  1378. SHADOWBUFFER: ds.l 65536/4
  1379.  
  1380. YANG: dc.w 0
  1381. XANG: dc.w 0
  1382.  
  1383. **********************************************************
  1384.  
  1385. * the definition of the screen - note that in assembler you
  1386. * MUST get the sizes of these fields correct, by consulting either
  1387. * the RKM or the header files
  1388.  
  1389.  
  1390. MyNewScreen    dc.w    0,0        left, top
  1391.         dc.w    320,256        width, height
  1392.         dc.w    8        depth
  1393.         dc.b    0,1        pens
  1394.         dc.w    0        viewmodes
  1395.         dc.w    CUSTOMSCREEN    type
  1396.         dc.l    MyFont        font
  1397.         dc.l    screen_title    title
  1398.         dc.l    0        gadgets
  1399.         dc.l    0        bitmap
  1400.  
  1401. * my font definition
  1402. MyFont    dc.l    font_name
  1403.     dc.w    TOPAZ_SIXTY
  1404.     dc.b    FS_NORMAL
  1405.     dc.b    FPF_ROMFONT
  1406.  
  1407. * the variables
  1408. _IntuitionBase    dc.l    0        Intuition lib pointer
  1409. _GfxBase    dc.l    0        graphics lib pointer
  1410. MyScreen        dc.l    0
  1411. MyWindow        dc.l    0
  1412. MyNewWindow    ds.b    nw_SIZE        a buffer
  1413.  
  1414.  
  1415. * some strings
  1416. int_name    INTNAME
  1417. graf_name    GRAFNAME
  1418. hello_message    dc.b    'Hello World'
  1419.  
  1420. * these are C strings, so have to be null terminated
  1421. screen_title    dc.b    'My Own Screen',0
  1422. font_name    dc.b    'topaz.font',0
  1423. window_title    dc.b    'A Simple Window',0
  1424.  
  1425.  even
  1426.  
  1427. xmouse: dc.w 0
  1428. ymouse: dc.w 0
  1429.  
  1430. spleen: dc.w 0
  1431. lastspleen: dc.w 0
  1432.  
  1433. COPIEDPAL:
  1434.  dc.w 256,0
  1435.  ds.l 3*256
  1436.  ds.l 10
  1437.  
  1438. PALETTEBIT:
  1439. ; incbin "256palette"
  1440. ; dc.w $ffff,$fffe
  1441.  
  1442.  incbin "ab3:includes/256pal"
  1443.  
  1444.  include "ab3:source_4000/chunky.s"
  1445.  
  1446. willy: ds.w 49
  1447.  
  1448.  
  1449. PALS:
  1450.  ds.l 2*49
  1451.  
  1452.  
  1453. FRAME: dc.w 4
  1454. FLIBBLE: dc.w 0
  1455.  
  1456. LIGHTMAP:
  1457.  dc.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1458.  dc.w 0,31,0,31,0,0,0,0,0,0,0,0,0,0,0,0
  1459.  dc.w 0,31,31,31,0,0,0,0,0,0,0,0,0,0,0,0
  1460.  dc.w 0,31,0,31,0,0,0,0,0,0,0,0,0,0,0,0
  1461.  dc.w 0,31,0,31,0,0,0,0,0,0,0,0,0,0,0,0
  1462.  dc.w 0,31,0,31,0,0,0,0,0,0,0,0,0,0,0,0
  1463.  dc.w 0,31,31,31,0,0,0,0,0,0,0,0,0,0,0,0
  1464.  dc.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1465.  dc.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1466.  dc.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1467.  dc.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1468.  dc.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1469.  dc.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1470.  dc.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1471.  dc.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1472.  dc.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1473.  
  1474. SMOOTHLIGHTMAP:
  1475.  ds.b 256*256
  1476.  
  1477. SOLIDMAP:
  1478.  ds.b 40*40*8
  1479.  
  1480. FASTBUFFER:
  1481.  dc.l fasty
  1482.  
  1483. fasty: ds.b 320*256
  1484.  
  1485. SUBSTACK: ds.l 10*100
  1486.  
  1487. LEFTUVS: ds.l 4*256
  1488. RIGHTUVS: ds.l 4*256
  1489.  
  1490. WORLD: incbin "ab3:includes/world"
  1491.  
  1492. TWEEN: incbin "ab3:includes/tweenbrightfile"
  1493.  
  1494. TEXTURES: incbin "ab3:includes/newtexturemaps"
  1495.  
  1496.  SECTION BGDROP,code_c
  1497.  
  1498. RAWSCRN:
  1499.  ds.l 2560*8
  1500.